<?php
/**
 * Created by PhpStorm.
 * User: lili
 * Date: 2019/3/23
 * Time: 10:41
 */

require_once "../tools/tools.php";

if('cli'!==PHP_SAPI){
    echo "必须使用cli";
    exit();
}

echo "一群猴子排成一圈，按1，2，...，n依次编号。然后从第1只开始数，数到第m只,把它踢出圈，
从它后面再开始数，再数到第m只，在把它踢出去...，如此不停的进行下去，直到最后只剩下
一只猴子为止，那只猴子就叫做大王。要求编程模拟此过程，输入m、n,输出最后那个大王的编号。\n";


fwrite(STDOUT,"输入n:");
$n = trim(fgets(STDIN));


fwrite(STDOUT,"输入m:");
$m = trim(fgets(STDIN));



echo "你输入的n:$n,m:$m\n";

function monkey($n ,$m){
    $arr = range(1,$n);     //构造数组  array(1,2,3,4,5,6,7,8);
    $i = 0;                 //设置数组指针
    while(count($arr)>1){
//        var_dump($arr);
        //遍历数组，判断当前猴子是否为出局序号，如果是则出局，否则放到数组最后
        if(($i+1) % $m ==0) {
            unset($arr[$i]);
        } else {
            //array_push() 函数向第一个参数的数组尾部添加一个或多个元素（入栈），然后返回新数组的长度。
            array_push($arr ,$arr[$i]); //本轮非出局猴子放数组尾部
            unset($arr[$i]);   //删除
        }
        $i++;
    }
    return [
        'c'=>$i,//数数的次数
        'h'=>$arr[$i]//大王编号
    ];
}

$time_start = microtime_float();


$res = monkey($n,$m);
//var_dump($res);
/*输出
Array
(
    [4] => 3
)
key 为数数的次数，value，为编号
*/

echo "最后的大王为：{$res['h']}号\n";
echo "数数次数：{$res['c']}\n";

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "Did nothing in $time seconds\n";